DB 모델링 설계_카카오톡 채팅방
카카오톡 채팅방 DB 모델링 설계
이미지 출처 : 카카오
대화목록
→ 채팅방
으로 이어지는 구조를 띄는 채팅방 DB 모델링을 설계 해본다.
테이블 생성
user 테이블
위와 같이 이름
,프로필 이미지
,배경 이미지
,상태 메세지
등의 정보가 필요하다고 할 때, 테이블은 다음과 같이 만들 수 있다.
CREATE TABLE `user` (
`userID` varchar(45) PRIMARY KEY NOT NULL,
`name` varchar(45) NOT NULL,
`statusMessage` text,
`profileImageUrl` text,
`backgroundImageUrl` text,
`createdAt` timestamp NOT NULL,
`updatedAt` timestamp
);
상태 메세지
,프로필 이미지
,배경 이미지
는 null 값을 가질 수 있다.
room 테이블
채팅 메세지를 가지는 채팅방의 정보를 저장하기 위한 테이블이다.
제목
,업데이트 시간
등의 정보를 가진다.
CREATE TABLE `room` (
`roomNo` int PRIMARY KEY NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`createdAt` timestamp NOT NULL,
`updatedAt` timestamp
);
member 테이블
채팅 방에 참여하고 있는 유저의 정보를 나타낸다.
CREATE TABLE `member` (
`roomNo` int NOT NULL,
`userID` varchar(255) NOT NULL,
`createdAt` timestamp NOT NULL,
PRIMARY KEY (`roomNo`, `userID`)
);
room 테이블의 기본키인 roomNo
와 user 테이블의 userId
의 조합을 기본키로 가진다.
chat 테이블
채팅 방에 등록된 채팅 메세지의 정보를 나타내는 테이블이다.
CREATE TABLE `chat` (
`chatNo` int PRIMARY KEY AUTO_INCREMENT,
`roomNo` int UNIQUE NOT NULL,
`userID` varchar(255) UNIQUE NOT NULL,
`type` ENUM ('TEXT', 'IMAGE', 'VIDEO') NOT NULL,
`content` TEXT NOT NULL,
`createdAt` timestamp NOT NULL
);
텍스트, 이미지, 비디오 형식으로 메세지를 보낼 수 있다고 할 때 메세지의 타입을 나타내는 type
레코드가 있다. 해당 레코드는 TEXT
,IMAGE
,VIDEO
의 ENUM으로 정의했다.
type
이 TEXT
일때 content
에는 채팅 메세지가, IMAGE
,VIDEO
일때는 url이 들어가게 된다.
follow 테이블
유저 사이의 팔로우 관계를 나타내는 테이블이다.
CREATE TABLE `follow` (
`userFrom` varchar(255) NOT NULL,
`userTo` varchar(255) NOT NULL,
PRIMARY KEY (`userFrom`, `userTo`)
);
ERD 다이어그램
전체적인 참조 관계를 정리했을 때 ERD 다이어그램은 다음과 같다.
참고
기여자
Jongminfire
📦